package com.service;

import com.service.IZSetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundZSetOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;

import java.util.Set;

@Service
public class ZSetServiceImpl implements IZSetService {


    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void sort() {
        BoundZSetOperations zset=redisTemplate.boundZSetOps("Chinese");

        zset.add("张三",50);
        zset.add("张四",60);
        zset.add("张五",70);
        zset.add("张六",80);
        zset.add("张七",90);
        zset.add("张八",20);
        zset.add("张九",30);
        long count=zset.size();
        System.out.println("个数："+count);

        Set<String> set=zset.range(0,2);
        for (String s:set){
            System.out.println("遍历输出：倒数前三名："+s);
        }

        //分数最高三人，且输出成绩
        //withScores结果带分数
        //Ranage根据下标查询(下标范围)
        //反转reverse。本来是升序，变降序
        Set<ZSetOperations.TypedTuple> setDescSort= zset.reverseRangeWithScores(0,2);
        for (ZSetOperations.TypedTuple z:setDescSort){
            System.out.println("分数最高三人，且输出成绩："+z.getValue()+"\t"+z.getScore());
        }



        System.out.println("------------------");
        Set<ZSetOperations.TypedTuple> setDescByScore=zset.reverseRangeWithScores(60,80);
        //求60--80间最高的分数
        for(ZSetOperations.TypedTuple z:setDescByScore){
            System.out.println("求60--80间最高的分数:"+z.getValue()+"\t"+z.getScore());
        }

        System.out.println("-----------");
        //判断某个是否存在集合中，求某个人倒数在集合中的名次，如果为null则不存在 从0开始
        Long mingci=zset.rank("张三");
        System.out.println("mingci=:"+mingci);


        //删除某个元素
        zset.remove("张三");
        System.out.println("delete=:"+zset.size());



    }
}
